package com.hy.mydesktop.client.component.mvc.factory;

import java.util.Iterator;
import java.util.List;

import com.extjs.gxt.ui.client.Style.Scroll;
import com.extjs.gxt.ui.client.mvc.Controller;
import com.extjs.gxt.ui.client.widget.Component;
import com.extjs.gxt.ui.client.widget.Layout;
import com.extjs.gxt.ui.client.widget.Window;
import com.hy.mydesktop.client.component.event.AppEvents;
import com.hy.mydesktop.client.component.meta.AccordionPanelModelEnum;
import com.hy.mydesktop.client.component.meta.WindowModelEnum;
import com.hy.mydesktop.client.component.mvc.controller.meta.WindowControllerModelEnum;
import com.hy.mydesktop.client.component.type.ComponentTypeEnum;
import com.hy.mydesktop.client.mvc.dataload.DataLoadController;
import com.hy.mydesktop.client.mvc.desktop.ShortcutController;
import com.hy.mydesktop.client.mvc.window.WindowController;
import com.hy.mydesktop.shared.persistence.domain.gxt.GxtComponentControllerMetaNodeModel;

/**
 * 
 * <ul>
 * <li>开发作者：花宏宇</li>
 * <li>设计日期：2010-9-30；时间：上午11:37:37</li>
 * <li>类型名称：DataLoadControllerFactory</li>
 * <li>设计目的：</li>
 * </ul>
 * <ul>
 * <b>修订编号：</b>
 * <li>修订日期：</li>
 * <li>修订作者：</li>
 * <li>修订原因：</li>
 * <li>修订内容：</li>
 * </ul>
 */
public class DataLoadControllerFactory {
/**
 * registerEventTypes(AppEvents.DESKTOP_SHORTCUT_ONCLICK_INIT);
 * 1 注册事件
 * 2 handleEvent
 * 
 */
	
	public static Controller createDataLoadController(GxtComponentControllerMetaNodeModel gxtComponentMetaNodeModel){
		
		return configureDataLoadController(gxtComponentMetaNodeModel);
	}
	
	/**
	 * 
	 * <ul>
	 * <li>方法含义：对窗口的属性进行配置</li>
	 * <li>方法作者：汤莉</li>
	 * <li>编写日期：2010-8-29；时间：下午下午03:56:36</li>
	 * </ul>
	 * <ul>
	 * <b>修订编号：</b>
	 * <li>修订日期：</li>
	 * <li>修订作者：</li>
	 * <li>修订原因：</li>
	 * <li>修订内容：</li>
	 * </ul>
	 * @param gxtComponentMetaNodeModel
	 * @return
	 */
	private static Controller configureDataLoadController(GxtComponentControllerMetaNodeModel gxtComponentMetaNodeModel){
		
		DataLoadController dataLoadController = createDefaultDataLoadController();
		
		//注册WindowController，需要监听的事件
		if(gxtComponentMetaNodeModel.get(WindowControllerModelEnum.REGISTEREVENTTYPES.name().toLowerCase())!=null){
			
			List<String> appEventCodes = gxtComponentMetaNodeModel.get(WindowControllerModelEnum.REGISTEREVENTTYPES.name().toLowerCase());
			for (String code : appEventCodes) {
				Integer i = Integer.valueOf(code);
				switch (i) {
		            /*case 1://Integer.valueOf("0001")
		            	dataLoadController.addRegisterEventType(AppEvents.Login);
		            	
		                break;
		            case 2://Integer.valueOf("0002")
		            	dataLoadController.addRegisterEventType(AppEvents.DESKTOP_INIT_FOR_LOGGED_IN_USER);	
		                break;
		            case 3://Integer.valueOf("0003")
		            	dataLoadController.addRegisterEventType(AppEvents.DESKTOP_SHORTCUT_ONCLICK_INIT);	
		                break;
		            case 6://Integer.valueOf("0006")
		            	dataLoadController.addRegisterEventType(AppEvents.DESKTOP_WINDOW_INIT);
		                break;
		            case 7://Integer.valueOf("0007")
		            	dataLoadController.addRegisterEventType(AppEvents.DESKTOP_APPLICATION_INIT);
		                break;
		            case 101://Integer.valueOf("0101")
		            	dataLoadController.addRegisterEventType(AppEvents.WINDOW_ININT);
		                break;*/
					case 401://Integer.valueOf("0101")
			            	dataLoadController.addRegisterEventType(AppEvents.LOAD_DATA_EVENT);
			                break;
	           		           
		            default:
		                break;
		        }
			}
		
		}
		//为Controller，添加它对应的视图View的标识 ViewData
		if(gxtComponentMetaNodeModel.get(WindowControllerModelEnum.VIEWDATA.name().toLowerCase())!=null){
			
			String viewDataCode = gxtComponentMetaNodeModel.get(WindowControllerModelEnum.VIEWDATA.name().toLowerCase());
			dataLoadController.setViewData(viewDataCode);
		
		}
		//为Controller添加它的标识 id
		if(gxtComponentMetaNodeModel.get(WindowControllerModelEnum.ID.name().toLowerCase())!=null){
			
			String id = gxtComponentMetaNodeModel.get(WindowControllerModelEnum.ID.name().toLowerCase());
			dataLoadController.setId(id);
		
		}
				
		return dataLoadController;
	}
	
	
	private static DataLoadController createDefaultDataLoadController(){
		DataLoadController DataLoadController = new DataLoadController();
		
		return DataLoadController;
	}
}
